home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-06
/
an201x.zip
/
DATAFILE.C
< prev
next >
Wrap
Text File
|
1991-12-19
|
11KB
|
400 lines
/*****************************************************************************
* Project: Workstation inventory
* File: DATAFILE.C
* Author: Morgan B. Adair
* Date: 12/15/91
*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <nit.h>
#include "datafile.h"
#include "btrieve.h"
#include "recdecl.h"
#define MOUSE_DRVR_MAJOR_VER 0xFF00
#define MOUSE_DRVR_MINOR_VER 0x00FF
void DisplayType(int displayCode);
void OutputData(WS_INVENTORY_RECORD *entry);
char positionBlock[128]; /* Btrieve file position block */
void LoadBtrieve(void)
{
system("btrieve");
}
int UnloadBtrieve(void)
{
return(BTRV(BT_STOP, NULL, NULL, NULL, NULL, 0));
}
int BtrieveIsLoaded(void)
{
int status;
char dataBuffer[5];
int dataLength = 5;
status = BTRV(BT_VERSION, NULL, dataBuffer, &dataLength, NULL, 0);
if (status == BT_SUCCESS)
return(TRUE);
else
return(FALSE);
}
int DataFileExists(char *filePath)
{
FILE *dataFile;
/* assume that if file is there, it's the right file */
dataFile = fopen(filePath, "r");
if (dataFile) {
fclose(dataFile);
return(TRUE);
} else
return(FALSE);
}
int OpenDataFile(char *fileName)
{
unsigned bufferLength;
WS_INVENTORY_RECORD entry;
int status;
/* Figure out how long the record is */
bufferLength = sizeof(WS_INVENTORY_RECORD);
/* Call BTRIEVE Open operation */
status = BTRV(BT_OPEN, positionBlock, (char *)&entry, (int *)&bufferLength, fileName, 1);
/* Return the result */
return(status);
}
int CreateDataFile(char *filePath)
{
unsigned bufferLength;
FILE_SPEC fileBuffer;
int status;
/* Create a new Btrieve file for the program file data */
/* Initialize buffer */
memset(&fileBuffer, 0, sizeof(fileBuffer));
/* Define the global file paramaters */
fileBuffer.recordLength = sizeof(WS_INVENTORY_RECORD);
fileBuffer.pageSize = 1024; /* use Btrieve's default page size */
fileBuffer.fileFlags = 0;
fileBuffer.indexCount = NUMBER_OF_KEYS;
fileBuffer.preAlloc = 0;
/* Key 0: network/node (1 key, 2 segments) */
/* Segment 1: network address, binary key */
fileBuffer.keyBuf[0].keyPos = 1;
fileBuffer.keyBuf[0].keyLen = 4;
/* BT_KEY_SEG means another segment of this key follows */
fileBuffer.keyBuf[0].keyFlag = BT_KEY_EXT_TYPE | BT_KEY_SEG;
fileBuffer.keyBuf[0].keyType = BT_KEY_BIN;
/* Segment 2: node address, binary key */
fileBuffer.keyBuf[1].keyPos = 5;
fileBuffer.keyBuf[1].keyLen = 6;
/* last segment in this key, so no BT_KEY_SEG on the flags */
fileBuffer.keyBuf[1].keyFlag = BT_KEY_EXT_TYPE;
fileBuffer.keyBuf[1].keyType = BT_KEY_BIN;
/* Figure out the data buffer length */
bufferLength = sizeof(fileBuffer);
/*--- Call Btrieve with a Create request. ---*/
status = BTRV(BT_CREATE, positionBlock, (char *)&fileBuffer, (int *)&bufferLength, filePath, 0);
return(status);
}
int ListItems(void)
{
int status;
unsigned dataLength;
char keyBuffer[80];
WS_INVENTORY_RECORD entry;
/* Figure out the data buffer length */
dataLength = sizeof(WS_INVENTORY_RECORD);
/* Get the first item in the database */
status = BTRV(BT_GET_FIRST, positionBlock, (char *)&entry, (int *)&dataLength, keyBuffer, 0);
/* As long as there are more, keep printing them */
while (status != BT_END_OF_FILE) {
/* Die on errors other than ERR_END_OF_FILE */
if (status != BT_SUCCESS)
return(status);
/* Show item to user */
OutputData(&entry);
/* Step forwards to the next item */
status = BTRV(BT_GET_NEXT, positionBlock, (char *)&entry, (int *)&dataLength, keyBuffer, 0);
}
return(BT_SUCCESS);
}
void OutputData(WS_INVENTORY_RECORD *entry)
{
int i;
printf("Network/node: ");
for (i=0; i<4; i++)
printf("%X", entry->network[i]);
printf("/");
for (i=0; i<6; i++)
printf("%X", entry->node[i]);
printf("\n");
printf("\tUser name (on default server): %s\n", entry->userName);
printf("\tIPX Version: %d.%02d\n", entry->IPXmajorVersion, entry->IPXminorVersion);
printf("\tSPX Version: %d.%02d\n", entry->SPXmajorVersion, entry->SPXminorVersion);
printf("\tShell Version: %d.%d, Rev %c\n", entry->shellMajorVersion,
entry->shellMinorVersion,
entry->shellRevisionLevel+'A');
printf("\tMachine model: ");
switch (entry->machineModel) {
case 0x2D : printf("\tCompaq Portable\n");
break;
case 0x9A : printf("\tCompaq Portable Plus\n");
break;
case 0xF8 : printf("\tIBM PS/2 Model 80\n");
break;
case 0xF9 : printf("\tIBM PC Convertible\n");
break;
case 0xFA : printf("\tIBM PS/2 Model 30\n");
break;
case 0xFB : printf("\tIBM PC XT\n");
break;
case 0xFC : switch (entry->machineSubmodel) {
case 0 :
case 1 : printf("\tIBM PC/AT\n");
break;
case 2 : printf("\tIBM PC/XT286\n");
break;
case 4 : printf("\tIBM PS/2 Model 50\n");
break;
case 5 : printf("\tIBM PS/2 Model 60\n");
break;
case 0xB : printf("\tIBM PS/1\n");
break;
default : printf("\tIBM PC/AT or PS class\n");
break;
}
break;
case 0xFD : printf("\tIBM PCjr\n");
break;
case 0xFE : printf("\tIBM PC/XT, Portable PC, or Compaq DeskPro\n");
break;
case 0xFF : printf("\tIBM PC\n");
break;
default : printf("\tUnknown machine type %d\n", entry->machineModel);
break;
}
switch (entry->processorType) {
case 0x0086 : printf("\t8086 or 8088 processor\n");
break;
case 0x0286 : printf("\t80286 processor\n");
break;
case 0x0386 : printf("\t80386DX or 80386SX processor\n");
break;
case 0x0486 : printf("\t80486DX or 80486SX processor\n");
break;
default : printf("\tUnable to identify CPU\n");
break;
}
printf("\tCoprocessor: ");
switch (entry->coprocessorType) {
case 0 : printf("No coprocessor\n");
break;
case 0x0087 : printf("8087 coprocessor\n");
break;
case 0x0287 : printf("80287 coprocessor\n");
break;
case 0x0387 : printf("80387 coprocessor\n");
break;
default : printf("Error getting coprocessor type: %u\n", entry->coprocessorType);
break;
}
printf("\tBase memory: %dK\n", entry->conventionalMemoryK);
printf("\tExtended memory: %dK\n", entry->extendedMemoryK);
printf("\tExpanded memory: %dK\n", entry->expandedMemoryK);
printf("\tVideo hardware: ");
DisplayType(entry->videoHardware);
if (entry->alternateVideoHardware) {
printf("\tAlternate display hardware: ");
DisplayType(entry->alternateVideoHardware);
}
printf("\tDOS version: %d.%02d\n", entry->DOSversionMajor, entry->DOSversionMinor);
if (entry->NICtype)
printf("\tNIC type: %s\n", entry->NICtype);
else
printf("\tNIC type: unable to identify\n");
printf("\t%d floppy drives\n", entry->numFloppyDrives);
printf("\t%d printers installed\n", entry->numPrintersInstalled);
printf("\t%d serial ports\n", entry->numSerialPorts);
if (entry->mouseDriverVersion)
printf("\tMouse driver version: %d.%02d\n",
(entry->mouseDriverVersion & MOUSE_DRVR_MAJOR_VER) >> 8,
entry->mouseDriverVersion & MOUSE_DRVR_MINOR_VER);
if (!(entry->mouseType))
printf("\tMouse type: no mouse found\n");
else {
printf("\tMouse type: ");
switch (entry->mouseType) {
case 1 : printf("Bus mouse\n");
break;
case 2 : printf("Serial mouse\n");
break;
case 3 : printf("InPort mouse\n");
break;
case 4 : printf("PS/2 mouse\n");
break;
case 5 : printf("Hewlet-Packard mouse\n");
break;
default : printf("Unknown mouse type\n");
break;
}
}
for (i=0; i<entry->numFloppyDrives; i++) {
printf("\tFloppy drive %d: ", i);
switch (entry->floppyDriveType[i]) {
case 1 : printf("360KB\n");
break;
case 2 : printf("1.2MB\n");
break;
case 3 : printf("720KB\n");
break;
case 4 : printf("1.44MB\n");
break;
default : printf("unable to identify type\n");
break;
}
}
for (i=0; i<entry->numHardDrives; i++)
printf("\tHard drive %d: %ld bytes\n",
i, entry->hardDriveSize[i]);
}
void DisplayType(int displayCode)
{
switch (displayCode) {
case 0 : printf("No display\n");
break;
case 1 : printf("Monochrome with 5151 monitor\n");
break;
case 2 : printf("CGA with 5153/4 monitor\n");
break;
case 4 : printf("EGA with 5153/4 montior\n");
break;
case 5 : printf("EGA with 5151 monitor\n");
break;
case 6 : printf("PGS with 5175 monitor\n");
break;
case 7 : printf("VGA with analog monochrome monitor\n");
break;
case 8 : printf("VGA with analog color monitor\n");
break;
case 11 : printf("Model 30 with analog monochrome monitor (MCGA)\n");
break;
case 12 : printf("Model 30 with analog color monitor (MCGA)\n");
break;
default : printf("Unable to identify graphics hardware\n");
}
}
int SearchItem(WS_INVENTORY_RECORD *entry)
{
int status;
unsigned dataLength;
int i;
char keyBuffer[KEY0_SIZE];
char *charPtr;
WS_INVENTORY_RECORD oldEntry;
/* Copy the key data to somewhere that can be overwritten */
charPtr = (char *)entry;
for (i=0; i<KEY0_SIZE; i++)
keyBuffer[i] = *charPtr++;
/* Figure out the data buffer size */
dataLength = sizeof(WS_INVENTORY_RECORD);
/* Find the item matching the specification */
status = BTRV(BT_GET_EQUAL, positionBlock, (char *)&oldEntry, (int *)&dataLength, keyBuffer, 0);
return(status);
}
int InsertItem(WS_INVENTORY_RECORD *entry)
{
int status;
int dataLength;
char keyBuffer[KEY0_SIZE];
/* Figure out the data buffer length */
dataLength = sizeof(WS_INVENTORY_RECORD);
/* Call Btrieve with Insert request */
status = BTRV(BT_INSERT, positionBlock, (char *)entry, &dataLength, keyBuffer, 0);
return(status);
}
int UpdateItem(WS_INVENTORY_RECORD *entry)
{
int status;
int dataLength;
char keyBuffer[KEY0_SIZE];
/* Figure out the data buffer length */
dataLength = sizeof(WS_INVENTORY_RECORD);
/* Call Btrieve with Update request */
status = BTRV(BT_UPDATE, positionBlock, (char *)entry, &dataLength, keyBuffer, 0);
return(status);
}
int CloseDataFile(void)
{
char keyBuffer[KEY0_SIZE];
int bufferLength;
WS_INVENTORY_RECORD entry;
int status;
/* Call Btrieve with Close operation */
status = BTRV(BT_CLOSE, positionBlock, (char *)&entry, &bufferLength, keyBuffer, 0);
return(status);
}